<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>点击</button>
    <script>
        //自定义函数
        // 把事件函数 统一起来管理

        // document.querySelector('button').addEventListener(function(){
        //         console.log('fn');
        // })


        let evobj = {};// 用一个对象把事件名和事件函数

        /* 
        
            {
                click :[fn1,fn2,fn3];
                mouseover:[fn1,fn2,fn3]
                myevent:[]
            }
        */

         // 添加事件 通过一个全局对象 保存事件名 和事件函数

        //  function addEvent(eventName,fn){
        //     if(typeof evobj[eventName] === 'undefined'){
        //         evobj[eventName] = [];
        //     }
        //     evobj[eventName].push(fn);
        //  }

         
        //  addEvent(myevent,function(){
        //     console.log(111);
        //  })
         
        //  addEvent(myevent,function(){
        //     console.log(111);
        //  })

        // 触发事件
        // function trigger(eventName){
        //     if(typeof evobj[eventName] !== 'undfiend'){
        //         evobj[eventName].forEach(()=>{
        //             fn();
        //         })
        //     }else{
        //         throw Error('参数错误');
        //     }        
        // }
        // setTimeout(()=>{
        //     trigger('myevent')
        // },2000)



        // 改造成类
        // 和自定义事件有关的内容 都在这个类里
        class Myevent{
            constructor (){
                this.evobj = {};
            }
            addEvent(eventName,fn){
            if(typeof this.evobj[eventName] === 'undefined'){
                this.evobj[eventName] = [];
            }
            this.evobj[eventName].push(fn);
         }
            trigger(eventName){
            if(typeof this.evobj[eventName] !== 'undfiend'){
                this.evobj[eventName].forEach(fn=>{
                    fn();
                })
            }else{
                throw Error('参数错误');
            }        
        }
    }

    let myevent = new Myevent();

    myevent.addEvent('myevent',function(){
        console.log(312321);
    })

    // 触发事件
    setTimeout(function(){
        myevent.trigger('myevent');
    },1000)










    </script>
</body>
</html>